<?php
namespace fakis\enum;

/**
 * 接口用于给类提供定义一系列字典特性，以及为处理字典提供一系列方法.
 * 定义字典结构为：`['字典名称' => ['索引' => '标签']]`.
 *
 * @package fakis\enum
 * @author Fakis <fakis738@qq.com>
 */
interface EnumInterface
{
    /**
     * 定义字典结构
     * @return array
     */
    public static function enums();

    /**
     * 取得字典名是否在字典中定义
     * @param string $name
     * @return bool
     */
    public static function hasEnums($name);

    /**
     * 返回字典列表
     * @param string $name 字典名
     * @return array
     */
    public static function getEnums($name);

    /**
     * 返回字典列表（标签为值）
     * @param string $name 字典名
     * @return array
     */
    public static function getEnumsByLabel($name);

    /**
     * 返回字典列表（索引为值）
     * @param string $name 字典名
     * @return array
     */
    public static function getEnumsByIndex($name);

    /**
     * 标签在字典列表中是否存在
     * @param string $name 字典名
     * @param string $label 标签
     * @return bool
     */
    public static function hasEnumLabel($name, $label);

    /**
     * 索引值在字典列表中是否存在
     * @param string $name 字典名
     * @param string $index 索引值
     * @return bool
     */
    public static function hasEnumIndex($name, $index);

    /**
     * 根据索引值取得字典标签
     * @param string $name 字典名
     * @param string $index 索引值
     * @param mixed $default 默认值
     * @return mixed
     */
    public static function getEnumLabel($name, $index, $default = null);

    /**
     * 根据标签取得字典索引值
     * @param string $name 字典名
     * @param string $label 标签
     * @return string|int
     */
    public static function getEnumIndex($name, $label);
}
